package abstractGA;

import java.util.ArrayList;
import java.util.List;

import abstractGA.result.OutData;
import foundation.fileUtil.DataCell;
import foundation.fileUtil.ExcelUtil;

public class OutGAResultThread{
	OutData outData = null;
	String outExcelFileNm = null;
	ArrayList<String> runIDs = null;
	GAParameter parameter = null;

	public OutGAResultThread(OutData outData, GAParameter parameter, String outExcelFileNm, ArrayList<String> runIDs) {
		this.outData = outData;
		this.parameter=parameter;
		this.outExcelFileNm = outExcelFileNm;
		this.runIDs = runIDs;
	}

	public void outToExcel(String startTime,String endTime) {// 模拟输出到excel
		// 输出参数设置
		// 输出摘要信息
		// 输出算法一次运行中各代种群的各个个体情况
		for (String runID : runIDs) {
			//从excel路径中获取主机名
			int index = outExcelFileNm.lastIndexOf("\\");
			int index2 = outExcelFileNm.indexOf("_");
			String host = outExcelFileNm.substring(index+1, index2);
			//从excel路径中获取案例名
			String[] a= outExcelFileNm.split("_");
			String caseName = a[1];
			//从excel路径中获取算法名
			String algorithm = a[2];
			//输出到excel
			ExcelUtil.write(outExcelFileNm, parameter.ouPara(runID, startTime, endTime,host,caseName,algorithm));
			List<List<DataCell>> chromRows = outData.getPopOut(runID);
			ExcelUtil.write(outExcelFileNm, chromRows);
		}
	}
}
//public class OutGAResultThread implements Runnable {
//	OutData outData = null;
//	String outExcelFileNm = null;
//	ArrayList<String> runIDs = null;
//	GAParameter parameter = null;
//
//	Thread thread = null;
//
//	public OutGAResultThread(OutData outData, GAParameter parameter, String outExcelFileNm, ArrayList<String> runIDs) {
//		this.outData = outData;
//		this.parameter=parameter;
//		this.outExcelFileNm = outExcelFileNm;
//		this.runIDs = runIDs;
//		thread = new Thread(this);
//	}
//
//	@Override
//	public void run() {// 模拟输出到excel
//		// 输出参数设置
//		// 输出摘要信息
//		ExcelUtil.write(outExcelFileNm, parameter.ouPara());
//
//		// 输出算法多次运行过程中，第i代最优个体目标值的平均值
//		List<List<DataCell>> chromRows = outData.getAveOfObj(runIDs, parameter.maxIterNum);
//		ExcelUtil.write(outExcelFileNm, chromRows);
//
//		// 输出算法一次运行中各代种群的最优解信息
//		for (String runID : runIDs) {
//			chromRows = outData.getBestChromsOut(runID);
//			ExcelUtil.write(outExcelFileNm, chromRows);
//		}
//
//		// 输出算法一次运行中各代种群的各个个体情况
//		if (parameter.isNeedOutPopulation()) {
//			try {
//				Thread.sleep(10*1000);
//			} catch (InterruptedException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
//			for (String runID : runIDs) {
//				chromRows = outData.getPopOut(runID);
//				ExcelUtil.write(outExcelFileNm, chromRows);
//			}
//		}
//	}
//
//	synchronized public void start() {
//		thread.start();
//	}
//
//	public void join(long milli) throws InterruptedException {
//		thread.join(milli);
//	}
//}
